<?php
// 这是系统自动生成的公共文件

// 应用公共文件

use think\exception\HttpResponseException;

if (!function_exists('result')) {
    function result($data = [], $msg = '', $code = 200)
    {
        $return['code'] = $code;
        $return['msg']  = $msg;
        $return['data'] = $data;
        return json($return);
    }
}

if (!function_exists('success')) {
    function success($data = [], $msg = 'success')
    {
        return result($data, $msg);
    }
}


if (!function_exists('error')) {
    function error($msg = '', $code = 500, $data = [])
    {
        return result($data, $msg, $code);
    }
}


if (!function_exists('password')) {

    /**
     * 密码加密算法
     * @param $value 需要加密的值
     * @param $type  加密类型，默认为md5 （md5, hash）
     * @return mixed
     */
    function password($value)
    {
        $value = sha1('blog_') . md5($value) . md5('_encrypt') . sha1($value);
        return sha1($value);
    }

}


if (!function_exists('throwErr')) {

    /**
     * @param int $code
     * @param string $msg
     * @param array $data
     */
    function throwErr($msg = '', $code = 500, $data = [])
    {
        $result   = [
            'code' => $code,
            'msg'  => $msg,
            'data' => $data,
        ];
        $response = json($result);
        throw new HttpResponseException($response);
    }

}


if (!function_exists('paginate')) {
    //分页处理信息
    function paginate($params,$page_size = 15)
    {
        $page_no   = 0;
        if (isset($params['page_size']) && $params['page_size'] && is_numeric($params['page_size'])) {
            $page_size = (int)$params['page_size'];
            if ($page_size < 0) $page_size = 15;
        }

        if (isset($params['page']) && $params['page'] && is_numeric($params['page'])) {
            $page_no = $params['page'];
            $page_no -= 1;
            if ($page_no < 0) $page_no = 0;
        }
        return [$page_size, $page_no];
    }
}

if (!function_exists('emoji_encode')) {
    function emoji_encode($str)
    {
        $strEncode = '';

        $length = mb_strlen($str, 'utf-8');

        for ($i = 0; $i < $length; $i++) {
            $_tmpStr = mb_substr($str, $i, 1, 'utf-8');
            if (strlen($_tmpStr) >= 4) {
                $strEncode .= '[[EMOJI:' . rawurlencode($_tmpStr) . ']]';
            } else {
                $strEncode .= $_tmpStr;
            }
        }
        return $strEncode;
    }
}

if (!function_exists('emoji_decode')) {
    function emoji_decode($str)
    {
        $strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function ($matches) {
            return rawurldecode($matches[1]);
        }, $str);

        return $strDecode;
    }
}

if (!function_exists('msectime')) {

    //获取微秒级时间戳
    function msectime()
    {
        list($msec, $sec) = explode(' ', microtime());
        return sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    }
}


/*
 2 *获取html指定标签的相关属性
 3 *@param string $content 要解析HTML内容
 4 *@param string $attr 指定要获取的标签属性
 5 *@param string $tag  指定解析标签
 6 *@return  array
 7 */

function get_html_attr_by_tag($content = "", $attr = "src", $tag = "img")
{

    $arr = array();

    $cache_arr = array();

    $attr = explode(',', $attr);

    $tag = explode(',', $tag);

    foreach ($tag as $i => $t) {

        foreach ($attr as $a) {

            preg_match_all("/<\s*" . $t . "\s+[^>]*?" . $a . "\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i", $content, $match);

            foreach ($match[2] as $n => $m) {

                $arr[$t][$n][$a] = $m;

            }

        }

    }

    return $arr;//array

}


/**
 * 剪切图片为圆形
 * @param  $picture 图片数据流 比如file_get_contents(imageurl)返回的东东
 * @return 图片数据流
 */
function yuanImg($picture)
{
    $src_img = imagecreatefromstring($picture);
    $w       = imagesx($src_img);
    $h       = imagesy($src_img);
    $w       = min($w, $h);
    $h       = $w;
    $img     = imagecreatetruecolor($w, $h);
    //这一句一定要有
    imagesavealpha($img, true);
    //拾取一个完全透明的颜色,最后一个参数127为全透明
    $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
    imagefill($img, 0, 0, $bg);
    $r   = $w / 2; //圆半径
    $y_x = $r; //圆心X坐标
    $y_y = $r; //圆心Y坐标
    for ($x = 0; $x < $w; $x++) {
        for ($y = 0; $y < $h; $y++) {
            $rgbColor = imagecolorat($src_img, $x, $y);
            if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
                imagesetpixel($img, $x, $y, $rgbColor);
            }
        }
    }
    /**
     * 如果想要直接输出图片，应该先设header。header("Content-Type: image/png; charset=utf-8");
     * 并且去掉缓存区函数
     */
    //获取输出缓存，否则imagepng会把图片输出到浏览器
    ob_start();
//    imagepng($img);
//    imagedestroy($img);
    $contents = ob_get_contents();
    ob_end_clean();
    return $contents;
}

/**
 * 在二维码的中间区域镶嵌图片
 * @param $QR 二维码数据流。比如file_get_contents(imageurl)返回的东东,或者微信给返回的东东
 * @param $logo 中间显示图片的数据流。比如file_get_contents(imageurl)返回的东东
 * @return  返回图片数据流
 */
function qrcodeWithLogo($QR, $logo)
{
    $QR             = imagecreatefromstring($QR);
    $logo           = imagecreatefromstring($logo);
    $QR_width       = imagesx($QR);//二维码图片宽度
    $QR_height      = imagesy($QR);//二维码图片高度
    $logo_width     = imagesx($logo);//logo图片宽度
    $logo_height    = imagesy($logo);//logo图片高度
    $logo_qr_width  = $QR_width / 2.2;//组合之后logo的宽度(占二维码的1/2.2)
    $scale          = $logo_width / $logo_qr_width;//logo的宽度缩放比(本身宽度/组合后的宽度)
    $logo_qr_height = $logo_height / $scale;//组合之后logo的高度
    $from_width     = ($QR_width - $logo_qr_width) / 2;//组合之后logo左上角所在坐标点
    /**
     * 重新组合图片并调整大小
     * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
     */
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
    /**
     * 如果想要直接输出图片，应该先设header。header("Content-Type: image/png; charset=utf-8");
     * 并且去掉缓存区函数
     */
    //获取输出缓存，否则imagepng会把图片输出到浏览器
    ob_start();
    imagepng($QR);
    imagedestroy($QR);
    imagedestroy($logo);
    $contents = ob_get_contents();
    ob_end_clean();
    return $contents;
}

function is_mobile($phone = '')
{
    $preg_phone = '/^1[3456789]\d{9}$/ims';
    if (preg_match($preg_phone, $phone)) {
        return true;
    } else {
        return false;
    }
}